#include <stdio.h>

int main()
{
  int x = 10;
  const int y = 20;

  // 1. 指向常量的指针
  const int *ptr;

  // 以下操作会导致编译错误：
  // *ptr = 30;  // 错误：不能修改指向的值
  ptr = &x; // 可以更改ptr的指向，但不能通过ptr修改所指向的值

  printf("初始值: x = %d\n", x);
  printf("通过指针访问: %d\n", *ptr);

  ptr = &y; // 正确：可以改变指针的指向
  printf("改变指针的指向后，现在指向y: %d\n", *ptr);

  // 2. 常量指针
  int *const ptr2 = &x; // ptr2是一个常量指针，指向一个int类型的变量

  printf("初始值: x = %d\n", *ptr2);
  *ptr2 = y; // 可以初始化，但之后不能改变ptr2的指向
  printf("重新赋值后，现在prt2 = %d\n", *ptr);
  // ptr2 = &y; // 错误：不能改变指针的指向
  return 0;
}